其他
第四十一讲 R-判断回归模型性能的指标
在“R与生物统计专题”中,我们会从介绍R的基本知识展开到生物统计原理及其在R中的实现。以从浅入深,层层递进的形式在投必得医学公众号更新。
在前面几讲,我们介绍了线性回归及R的实现(第四十讲 R-线性回归:预测模型及可信区间、第三十九讲 R-线性回归:自变量中存在分类变量时、第三十八讲 R-线性回归模型的假设条件检验)。
当回归模型建立好以后,如何评价该回归模型是否与另一个回归模型有区别,如何比较两个回归模型的性能?这一讲中,我们将给大家介绍几个评价回归模型性能的统计指标。
R平方(R2),它是预测变量能解释结果变量变异的百分比例,范围为0到1。R2是观察到的实际结果与模型构建的预测值之间的相关系数的平方。R平方越高,模型越好。
均方根误差(rootmean squared error, RMSE),它测量的是模型预测的结果与实际观察结果间的平均误差。从数学上讲,RMSE是均方误差(mean squared error, MSE)的平方根,该均方根是观察到的实际值与模型预测的值之间的均方差。因此,MSE = mean((observeds -predicteds)^2)和RMSE = sqrt(MSE)。RMSE越低,模型越好。
残差标准误/残留标准误差(residual standard error, RSE),也称为模型sigma(model sigma),是针对模型中预测变量数量进行调整的RMSE。RSE越低,模型越好。实际上,RMSE和RSE之间的差异很小,尤其是对于多元数据(含有多个预测变量的模型)而言。
像RMSE一样,平均绝对误差(mean absolute error, MAE)也可以测量预测误差。在数学上,它是观察到的结果与预测的结果之间的平均绝对差MAE = mean(abs(observeds -predicteds))。与RMSE相比,MAE对异常值的敏感性较低。
F统计量:它提供了模型的整体重要性。它评估至少一个预测变量是否具有非零系数。F统计量越大,对应的统计显着性p值(p <0.05)越小。
tidyverse
用于数据处理和可视化modelr
用于计算回归模型性能指标broom
轻松创建包含模型统计指标的整洁数据框(数据集)library(tidyverse)
library(modelr)
library(broom)
swiss
。library(datasets)
data("swiss")
sample_n(swiss,3)
Fertility Agriculture Examination Education Catholic Infant.Mortality
77.3 89.7 5 2 100.00 18.3
76.1 35.3 9 7 90.57 26.6
83.1 45.1 6 9 84.84 22.2
1. 模型1,包括所有预测变量([.]表示数据swiss中所有出了结果变量Fertility外所有的变量)
model1<-lm(Fertility~.,data=swiss)
model2<-lm(Fertility~.-Examination,data=swiss)
summary()
[stats 软件包中],返回R平方,调整后的R方和RSEAIC()
和BIC()
[stats 软件包中],分别计算AIC和BICsummary(model1)
AIC(model1)
BIC(model1)
library(modelr)
data.frame(
R2=rsquare(model1,data=swiss), RMSE=rmse(model1,data=swiss),
MAE=mae(model1,data=swiss)
)
library(caret)
predictions<-model1%>%predict(swiss)
data.frame(
R2=R2(predictions,swiss$Fertility), RMSE=RMSE(predictions,swiss$Fertility),
MAE=MAE(predictions,swiss$Fertility)
)
glance()
[broom软件包中],可以一次性计算所有的指标:R2,调整后的R方,sigma(RSE),AIC,BIC。library(broom)
glance(model1)
swiss%>%
add_predictions(model1)%>%
summarise(
R2=cor(Fertility,pred)^2, MSE=mean((Fertility-pred)^2), RMSE=sqrt(MSE),
MAE=mean(abs(Fertility-pred))
)
glance()
来简单比较两个模型的整体质量:glance(model1)%>%
dplyr::select(adj.r.squared,sigma,AIC,BIC,p.value)#纠错:该行为代码## adj.r.squared sigma AIC BIC p.value
1 0.671 7.17 326 339 5.59e-10
glance(model2)%>%
dplyr::select(adj.r.squared,sigma,AIC,BIC,p.value) #纠错:该行为代码
adj.r.squared sigma AIC BIC p.value
1 0.671 7.17 325 336 1.72e-10
sigma(model1)/mean(swiss$Fertility)
[1] 0.102
当然啦,R语言的掌握是在长期训练中慢慢积累的。一个人学习太累,不妨加入“R与统计交流群”,和数百位硕博一起学习。
快扫二维码撩客服,
带你进入投必得医学交流群,
让我们共同进步!
↓↓
- END -
长按二维码关注「投必得医学」,更多科研干货在等你!